Scrapbox to Markdown 画像とicon記法の実装
impl6
画像いきます
12500requests/日
/staが4500page、仮に5pageに1pageで画像1枚使ってるとすると、900枚 まあ問題なさそうか
pagesize 1~100
100回をn回ぶん回すことになるね
実装は?
ステップ分けた方がいい
json to markdownする前に「画像リンクするのに必要な情報を集めてくるフェーズ」を設ける
コマンド一発で行えるようにする
トークンはたぶん用意してもらう必要があるな
つまり
.png決め打ちでいいので変換をつくりきる
Gyazo API使って正しいurlをゲットする処理(というかコマンド)
↑ この二つがある
変換済ませたいから、前者からいきまふ
帰還
追加で以下が必要です
icon記法をパースして<img>タグに置換し、(その中身を)手に入れてた情報を使って仕上げる
が、これはscb_to_markdown_in_line()より上のレイヤーの仕事なので、ここではしません
行に収まるように配置している
imgタグのheight/widthではどう指定すればいい?
ScrapboxはCSSで処理してるっぽいけど、Markdownに載せる場合はimgタグの表現力しか使えない
imgタグ置換処理
[sta.icon](sta.icon.md)
[sta.icon] 丸々カットして
replace [XXX.icon] to <img src='ページXXXに載ってる画像のURL' width="同左縦横比に基づいたX" height="同左縦横比に基づいたY" />
markdown layerではCSSもjsも使えないから、結論として
pixel値だけで頑張る必要がある
行の高さはわからない(ので適当に決め打ちするしかない)
実装
repl.it用
code:py
import re
s = '''画像 noindent
<br>
画像 indent
<br>
- ユーザーアイコンはどうしましょうかsta.icon(sta.icon.md)
- わかるー(x3 してます)sta.icon*3(sta.icon*3.md)
- わかるーsta.icon(sta.icon.md)sta.iconsta.icon(sta.icon.md)
<br>
'''
lines = s.split('\n')
RE_ICON_TO_REMOVE_NONGREEDY = re.compile(r'\(.+?\.icon(\*0-9+){0,1}\.md\)') for i,line in enumerate(lines):
newline = line
newline = re.sub(RE_ICON_TO_REMOVE_NONGREEDY, '', newline)
if line==newline:
continue
newline = re.sub(RE_ICON_TO_REPLACE_TO_IMG, '<img src="\\1" height="32" />', newline)
print('{}: {}'.format(i, newline))
丸々カット
RE_ICON_TO_REMOVE = re.compile(r'\(.+\.icon(\*[0-9]+){0,1}\.md\)')
これだと非貪欲にならん
RE_ICON_TO_REMOVE_NONGREEDY = re.compile(r'\((.+\.icon(\*[0-9]+){0,1}\.md)?\)')
これも結果変わらず
というか「非貪欲の?」は?か*か+につけるものか
RE_ICON_TO_REMOVE_NONGREEDY = re.compile(r'\(.+?\.icon(\*[0-9]+){0,1}\.md\)')
year!
imgタグ化
RE_ICON_TO_REPLACE_TO_IMG = re.compile(r'\[(.+?)\.icon(\*[0-9]+){0,1}\]')
https://gyazo.com/3ce91d9512e81b8c1b45e4af5df96176
icon*3 ← このn-repeatの対処が難しい。。。